Adding some more judges, here and there.
[and.git] / ICPC Live Archive / 3928 - Ballroom lights / help / gomox.ar-pap-2010-d9b17e5cb110 / tpb / doc / data-flow.tex
blob75f821c817797716796af27379a30d5325701dbc
1 \section{10594 - Data Flow}
3 \textbf{Problema:}
4 Dada una red en la que cada enlace tiene asociado un
5 tiempo de transferencia (por unidad de datos), y todos
6 los enlaces permiten transferir una cantidad m\'axima
7 de datos fija $k$, determinar la manera de enviar una cierta
8 cantidad de datos $m$ desde un nodo $v_A$ a un nodo $v_B$
9 de manera tal que el tiempo de transferencia sea m\'inimo.
11 \subsection{Resoluci\'on}
13 Se modela como un problema de flujo m\'aximo de costo m\'inimo.
14 Se considera un grafo donde todas las conexiones dadas en la entrada
15 son ejes de capacidad $k$, y el costo de un eje es el tiempo de
16 transferencia por unidad.
17 Para convertir el problema original en un problema de flujo m\'aximo,
18 se agrega un nodo inicial $v_0$ y un eje $(v_0,v_A)$ con capacidad
19 $m$ y costo $0$.
21 El problema de buscar el flujo m\'aximo de costo m\'inimo desde $v_0$ hasta $v_B$
22 es equivalente al problema original, porque
23 si el flujo m\'aximo de $v_0$ a $v_B$ es igual a $m$,
24 en particular es posible enviar $m$ unidades de $v_A$ a $v_B$.
25 Inversamente, si el flujo m\'aximo de $v_0$ a $v_B$ es menor que $m$,
26 no es posible enviar m\'as de $m$ unidades en la red original, ya
27 que el eje agregado entre $v_0$ a $v_A$ no est\'a saturado, y por
28 lo tanto el corte m\'inimo se da en ejes de la red original.
30 El algoritmo utilizado es Ford-Fulkerson, donde en cada paso
31 el camino de aumento elegido es el de costo m\'inimo. El
32 camino de aumento de costo m\'inimo se busca con Bellman-Ford.
33 Como en el grafo original los ejes tienen costos no negativos,
34 nunca hay ciclos de costo negativo en el grafo residual.
36 El hecho de que todos los ejes de la red original (antes de
37 agregar $v_0$) tengan la misma capacidad, permite acotar la
38 cantidad de pasos de Ford-Fulkerson de la siguiente manera.
40 La capacidad del eje $(v_0,v_A)$ en el grafo residual
41 representa el flujo remanente, es decir, la cantidad de
42 unidades de informaci\'on que todav\'ia no fueron asignadas
43 a ejes.
44 Todos los ejes del grafo, exceptuando el eje $(v_0,v_A)$,
45 tienen la misma capacidad $k$. Como en la red del problema los
46 ejes no son orientados, cada eje $(v,w)$ tiene asociado
47 un eje reverso $(w,v)$ de igual capacidad.
48 Cada eje y su eje reverso pueden encontrarse en $2k + 1$ estados
49 posibles: o bien ambos tienen asignado flujo $0$, o bien el flujo
50 es una cantidad de datos $1 \leq c \leq k$ en un sentido,
51 o bien en el sentido opuesto.
53 En cada paso de Ford-Fulkerson, si hay un camino de aumento
54 desde $v_0$ hasta $v_B$, este camino debe ser de la forma
55 $v_0, v_A, ..., v_B$.
56 Adem\'as, como no hay ciclos de costo negativo y el camino
57 es m\'inimo, el camino debe ser simple en nodos (si repitiera
58 un nodo $v_i$, habr\'ia un ciclo de costo positivo y se
59 podr\'ia sacar).
60 Por lo tanto, en un camino de aumento no se vuelve a utilizar
61 el eje $(v_0,v_A)$ (ni su reverso). Como adem\'as los caminos
62 de aumento tienen capacidad positiva por definici\'on, la capacidad
63 residual del eje $(v_0,v_A)$ va disminuyendo a lo largo de las
64 iteraciones del algoritmo.
66 Por inducci\'on, se puede ver que mientras el flujo remanente
67 sea mayor que $k$ (es decir, en todos los pasos excepto en el \'ultimo)
68 y mientras haya un camino de aumento,
69 la capacidad del camino de aumento encontrado entre $v_A$ y $v_B$
70 es $k$, y adem\'as el flujo asignado a cada uno de los restantes ejes
71 del grafo (exceptuando el eje $(v_0,v_A)$) es o bien $0$ o bien $k$
72 (es decir, si se pasa flujo por un eje, esto se hace hasta saturar
73 la capacidad).
75 En el caso base, el flujo es $0$ y la capacidad del camino de
76 aumento es $k$. En una iteraci\'on $i > 0$, la capacidad del
77 camino de aumento entre $v_A$ y $v_B$ est\'a dada por el m\'inimo
78 de las capacidades de los ejes en el grafo residual. Si un eje
79 tiene asignado flujo $k$, su capacidad residual es $0$ y la
80 capacidad residual del eje reverso es $2k$. Si un eje tiene
81 asignado flujo $0$, su capacidad residual y la de su eje reverso
82 son ambas $k$.
84 Despu\'es de la primera iteraci\'on, hay al menos un camino $C_1$
85 desde $v_A$ hasta $v_B$ cuyos ejes tienen asignado flujo positivo
86 (esto es porque el algoritmo de Ford-Fulkerson en todo
87 momento mantiene un conjunto de caminos disjuntos desde $v_0$
88 hasta $v_B$).
89 Por lo tanto, en la iteraci\'on $i > 0$, no puede ocurrir que haya
90 un camino de aumento $C_2$ desde $v_A$ hasta $v_B$ que tenga
91 capacidad $2k$ (es decir, tomando siempre ejes con flujo
92 en un sentido y satur\'andolos en el sentido opuesto),
93 porque si esto ocurriera se podr\'ia construir un ciclo de costo negativo
94 combinando los caminos $C_1$ y $C_2$. Esto es así porque se puede
95 pasar flujo por $C_2$ en la dirección opuesta sin aumentar el costo,
96 ya que el costo se estaba pagando antes, pero pasando flujo en la otra
97 dirección, y luego dejar de pasar flujo por $C_1$, lo cual disminuye el costo,
98 ya que los costos de los ejes son positivos, por lo cual son mayores a $0$.
100 Por lo tanto, el camino de aumento tiene capacidad $k$.
101 Una vez determinado esto, los flujos de los ejes se
102 actualizan restando o sumando $k$ en el eje y en el eje
103 reverso, de tal manera que cada uno sigue teniendo
104 correspondientemente flujo $0$ o $k$.
106 Por \'ultimo, si en alguna iteraci\'on la capacidad residual
107 de $(v_0,v_A)$ es menor que $k$, el algoritmo termina en esa
108 iteraci\'on. Dado que todos los caminos de aumento tienen
109 capacidad $k$, la capacidad residual del eje $(v_0,v_A)$ debe
110 ser $m\mod k$. Despu\'es de esta \'ultima iteraci\'on, deja de
111 valer la propiedad sobre el flujo asignado a cada uno de los ejes,
112 pero la capacidad residual del eje $(v_0,v_A)$ queda en $0$
113 y por lo tanto el algoritmo termina.
115 Este razonamiento permite acotar la cantidad de iteraciones
116 de Ford-Fulkerson por $\lceil\frac{m}{k}\rceil$.
117 Adem\'as, el costo de encontrar el camino de aumento de costo m\'inimo
118 con Bellman-Ford es el de hacer a lo sumo $N - 1$ iteraciones
119 (donde $N$ es la cantidad de nodos del grafo) en las que se
120 recorren las $M$ aristas del grafo,
121 representado con listas de adyacencia.
122 La complejidad del algoritmo resulta entonces de las
123 $O(\frac{m}{k})$ iteraciones, cada una con un costo de
124 $O(N M)$, es decir $O(\frac{m}{k} N M)$.
126 \subsection{Implementación}
127 \noindent
128 \ttfamily
129 \shorthandoff{"}\\
130 \hlstd{}\hlline{\ 1\ }\\
131 \hlline{\ 2\ }\hldir{\#include\ $<$iostream$>$}\\
132 \hlline{\ 3\ }\hlstd{}\hldir{\#include\ $<$map$>$}\\
133 \hlline{\ 4\ }\hlstd{}\hldir{\#include\ $<$vector$>$}\\
134 \hlline{\ 5\ }\hlstd{}\hldir{\#include\ $<$list$>$}\\
135 \hlline{\ 6\ }\hlstd{}\hldir{\#include\ $<$cassert$>$}\\
136 \hlline{\ 7\ }\hlstd{}\\
137 \hlline{\ 8\ }\hlkwa{using\ namespace\ }\hlstd{std}\hlsym{;}\\
138 \hlline{\ 9\ }\hlstd{}\\
139 \hlline{10\ }\hlkwc{typedef\ }\hlstd{}\hlkwb{long\ long\ int\ }\hlstd{int64}\hlsym{;}\\
140 \hlline{11\ }\hlstd{}\\
141 \hlline{12\ }\hldir{\#define\ forsn(i,\ s,\ n)\ for\ (int64\ i\ =\ (s);\ i\ $<$\ (n);\ i++)}\\
142 \hlline{13\ }\hlstd{}\hldir{\#define\ forn(i,\ n)\ forsn\ (i,\ 0,\ n)}\\
143 \hlline{14\ }\hlstd{}\hldir{\#define\ forall(x,\ s)\ for\ (typeof((s).begin())\ x\ =\ (s).begin();\ x\ !=\ (s).end();\ x++)}\\
144 \hlline{15\ }\hlstd{}\\
145 \hlline{16\ }\hlkwc{typedef\ }\hlstd{vector}\hlsym{$<$}\hlstd{int64}\hlsym{$>$\ }\hlstd{vint}\hlsym{;}\\
146 \hlline{17\ }\hlstd{}\hlkwc{typedef\ }\hlstd{vector}\hlsym{$<$}\hlstd{vint}\hlsym{$>$\ }\hlstd{vvint}\hlsym{;}\\
147 \hlline{18\ }\hlstd{\\
148 \hlline{19\ }int64\ n}\hlsym{;}\\
149 \hlline{20\ }\hlstd{int64\ capacidad\textunderscore eje0}\hlsym{;}\\
150 \hlline{21\ }\hlstd{int64\ capacidad\textunderscore enlace}\hlsym{;}\\
151 \hlline{22\ }\hlstd{vvint\ grafo}\hlsym{;}\hlstd{\ \ }\hlsym{}\hlstd{}\hlslc{//\ listas\ de\ adyacencia}\\
152 \hlline{23\ }\hlstd{vvint\ costo}\hlsym{;}\hlstd{\ \ }\hlsym{}\hlstd{}\hlslc{//\ matriz}\\
153 \hlline{24\ }\hlstd{vvint\ flujo}\hlsym{;}\hlstd{\ \ }\hlsym{}\hlstd{}\hlslc{//\ matriz}\\
154 \hlline{25\ }\hlstd{}\\
155 \hlline{26\ }\hldir{\#define\ agregar(u,\ v,\ c)\ \{\ $\backslash$}\\
156 \hlline{27\ }\hldir{\ grafo{[}u{]}.push\textunderscore back(v);\ $\backslash$}\\
157 \hlline{28\ }\hldir{\ costo{[}u{]}{[}v{]}\ =\ (c);\ $\backslash$}\\
158 \hlline{29\ }\hldir{\ grafo{[}v{]}.push\textunderscore back(u);\ $\backslash$}\\
159 \hlline{30\ }\hldir{\ costo{[}v{]}{[}u{]}\ =\ (c);\ $\backslash$}\\
160 \hlline{31\ }\hldir{\}}\\
161 \hlline{32\ }\hlstd{}\\
162 \hlline{33\ }\hldir{\#define\ capacidad(v,\ w)\ (((v)\ ==\ 0\ \textbar \textbar \ (w)\ ==\ 0)\ ?\ capacidad\textunderscore eje0\ :\ capacidad\textunderscore enlace)}\\
163 \hlline{34\ }\hlstd{}\\
164 \hlline{35\ }\hlkwb{void\ }\hlstd{}\hlkwd{print\textunderscore grafo\textunderscore residual}\hlstd{}\hlsym{()\ \{}\\
165 \hlline{36\ }\hlstd{\ cout\ }\hlsym{$<$$<$\ }\hlstd{}\hlstr{"{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}"}\hlstd{\ }\hlsym{$<$$<$\ }\hlstd{endl}\hlsym{;}\\
166 \hlline{37\ }\hlstd{\ }\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{v}\hlsym{,\ }\hlstd{n}\hlsym{)\ \{}\\
167 \hlline{38\ }\hlstd{}\hlstd{\ \ }\hlstd{cout\ }\hlsym{$<$$<$\ }\hlstd{v\ }\hlsym{$<$$<$\ }\hlstd{endl}\hlsym{;}\\
168 \hlline{39\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwd{forall\ }\hlstd{}\hlsym{(}\hlstd{vecino}\hlsym{,\ }\hlstd{grafo}\hlsym{{[}}\hlstd{v}\hlsym{{]})\ \{}\\
169 \hlline{40\ }\hlstd{}\hlstd{\ \ \ }\hlstd{cout\ }\hlsym{$<$$<$\ }\hlstd{}\hlstr{"{-}{-}$>$\ "}\hlstd{}\hlsym{;}\\
170 \hlline{41\ }\hlstd{}\hlstd{\ \ \ }\hlstd{cout\ }\hlsym{$<$$<$\ {*}}\hlstd{vecino}\hlsym{;}\\
171 \hlline{42\ }\hlstd{}\hlstd{\ \ \ }\hlstd{cout\ }\hlsym{$<$$<$\ }\hlstd{}\hlstr{"\ costo\ =\ "}\hlstd{\ }\hlsym{$<$$<$\ }\hlstd{costo}\hlsym{{[}}\hlstd{v}\hlsym{{]}{[}{*}}\hlstd{vecino}\hlsym{{]};}\\
172 \hlline{43\ }\hlstd{}\hlstd{\ \ \ }\hlstd{cout\ }\hlsym{$<$$<$\ }\hlstd{}\hlstr{"\ flujo\ =\ "}\hlstd{\ }\hlsym{$<$$<$\ }\hlstd{flujo}\hlsym{{[}}\hlstd{v}\hlsym{{]}{[}{*}}\hlstd{vecino}\hlsym{{]}\ $<$$<$\ }\hlstd{}\hlstr{"\ /\ "}\hlstd{\ }\hlsym{$<$$<$\ }\hlstd{}\hlkwd{capacidad}\hlstd{}\hlsym{(}\hlstd{v}\hlsym{,\ {*}}\hlstd{vecino}\hlsym{);}\\
173 \hlline{44\ }\hlstd{}\hlstd{\ \ \ }\hlstd{cout\ }\hlsym{$<$$<$\ }\hlstd{endl}\hlsym{;}\\
174 \hlline{45\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlsym{\}}\\
175 \hlline{46\ }\hlstd{}\hlstd{\ \ }\hlstd{cout\ }\hlsym{$<$$<$\ }\hlstd{endl}\hlsym{;}\\
176 \hlline{47\ }\hlstd{\ }\hlsym{\}}\\
177 \hlline{48\ }\hlstd{}\hlsym{\}}\\
178 \hlline{49\ }\hlstd{}\\
179 \hlline{50\ }\hldir{\#define\ INF\ 0x7fffffff}\\
180 \hlline{51\ }\hlstd{}\hldir{\#define\ No\textunderscore hay\textunderscore camino\ {-}1}\\
181 \hlline{52\ }\hlstd{}\hldir{\#define\ signo(x)\ ((x)\ $<$\ 0\ ?\ {-}1\ :\ 1)}\\
182 \hlline{53\ }\hlstd{int64\ }\hlkwd{caumento}\hlstd{}\hlsym{(}\hlstd{vint}\hlsym{\&\ }\hlstd{camino}\hlsym{)\ \{}\\
183 \hlline{54\ }\hlstd{\ }\hlslc{//\ buscar\ el\ camino\ de\ aumento\ de\ costo\ minimo\ usando\ Bellman{-}Ford}\\
184 \hlline{55\ }\hlstd{\ vint\ }\hlkwd{dist}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{INF}\hlsym{);}\\
185 \hlline{56\ }\hlstd{\ vint\ }\hlkwd{ant}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{);}\\
186 \hlline{57\ }\hlstd{\\
187 \hlline{58\ }\ dist}\hlsym{{[}}\hlstd{}\hlnum{0}\hlstd{}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
188 \hlline{59\ }\hlstd{\\
189 \hlline{60\ }\ }\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{it}\hlsym{,\ }\hlstd{n\ }\hlsym{{-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ \{}\\
190 \hlline{61\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlslc{//\ para\ cada\ arista\ del\ grafo\ residual}\\
191 \hlline{62\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwb{bool\ }\hlstd{cambio\ }\hlsym{=\ }\hlstd{}\hlkwa{false}\hlstd{}\hlsym{;}\\
192 \hlline{63\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{v}\hlsym{,\ }\hlstd{n}\hlsym{)\ }\hlstd{}\hlkwd{forall\ }\hlstd{}\hlsym{(}\hlstd{vecino}\hlsym{,\ }\hlstd{grafo}\hlsym{{[}}\hlstd{v}\hlsym{{]})\ \{}\\
193 \hlline{64\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlkwb{const\ }\hlstd{int64\ w\ }\hlsym{=\ {*}}\hlstd{vecino}\hlsym{;}\\
194 \hlline{65\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{}\hlkwd{capacidad}\hlstd{}\hlsym{(}\hlstd{v}\hlsym{,\ }\hlstd{w}\hlsym{)\ {-}\ }\hlstd{flujo}\hlsym{{[}}\hlstd{v}\hlsym{{]}{[}}\hlstd{w}\hlsym{{]}\ $<$=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{)\ }\hlstd{}\hlkwa{continue}\hlstd{}\hlsym{;}\\
195 \hlline{66\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{dist}\hlsym{{[}}\hlstd{v}\hlsym{{]}\ ==\ }\hlstd{INF}\hlsym{)\ }\hlstd{}\hlkwa{continue}\hlstd{}\hlsym{;}\\
196 \hlline{67\ }\hlstd{}\hlstd{\ \ \ }\hlstd{int64\ ndist\ }\hlsym{=\ }\hlstd{dist}\hlsym{{[}}\hlstd{v}\hlsym{{]}\ +\ }\hlstd{}\hlkwd{signo}\hlstd{}\hlsym{(}\hlstd{flujo}\hlsym{{[}}\hlstd{v}\hlsym{{]}{[}}\hlstd{w}\hlsym{{]})\ {*}\ }\hlstd{costo}\hlsym{{[}}\hlstd{v}\hlsym{{]}{[}}\hlstd{w}\hlsym{{]};}\\
197 \hlline{68\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{ndist\ }\hlsym{$<$\ }\hlstd{dist}\hlsym{{[}}\hlstd{w}\hlsym{{]})\ \{}\\
198 \hlline{69\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{dist}\hlsym{{[}}\hlstd{w}\hlsym{{]}\ =\ }\hlstd{ndist}\hlsym{;}\\
199 \hlline{70\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{ant}\hlsym{{[}}\hlstd{w}\hlsym{{]}\ =\ }\hlstd{v}\hlsym{;}\\
200 \hlline{71\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{cambio\ }\hlsym{=\ }\hlstd{}\hlkwa{true}\hlstd{}\hlsym{;}\\
201 \hlline{72\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlsym{\}}\\
202 \hlline{73\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlsym{\}}\\
203 \hlline{74\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(!}\hlstd{cambio}\hlsym{)\ }\hlstd{}\hlkwa{break}\hlstd{}\hlsym{;}\\
204 \hlline{75\ }\hlstd{\ }\hlsym{\}}\\
205 \hlline{76\ }\hlstd{\\
206 \hlline{77\ }\ }\hlslc{//\ armar\ el\ camino}\\
207 \hlline{78\ }\hlstd{\ int64\ costo\textunderscore camino\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
208 \hlline{79\ }\hlstd{\ int64\ actual\ }\hlsym{=\ }\hlstd{n\ }\hlsym{{-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\\
209 \hlline{80\ }\hlstd{\ }\hlkwa{while\ }\hlstd{}\hlsym{(}\hlstd{}\hlkwa{true}\hlstd{}\hlsym{)\ \{}\\
210 \hlline{81\ }\hlstd{}\hlstd{\ \ }\hlstd{camino}\hlsym{.}\hlstd{}\hlkwd{push\textunderscore back}\hlstd{}\hlsym{(}\hlstd{actual}\hlsym{);}\\
211 \hlline{82\ }\hlstd{}\hlstd{\ \ }\hlstd{int64\ anterior\ }\hlsym{=\ }\hlstd{ant}\hlsym{{[}}\hlstd{actual}\hlsym{{]};}\\
212 \hlline{83\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{anterior\ }\hlsym{==\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ }\hlstd{}\hlkwa{break}\hlstd{}\hlsym{;}\\
213 \hlline{84\ }\hlstd{}\hlstd{\ \ }\hlstd{costo\textunderscore camino\ }\hlsym{+=\ }\hlstd{}\hlkwd{signo}\hlstd{}\hlsym{(}\hlstd{flujo}\hlsym{{[}}\hlstd{anterior}\hlsym{{]}{[}}\hlstd{actual}\hlsym{{]})\ {*}\ }\hlstd{costo}\hlsym{{[}}\hlstd{anterior}\hlsym{{]}{[}}\hlstd{actual}\hlsym{{]};}\\
214 \hlline{85\ }\hlstd{}\hlstd{\ \ }\hlstd{actual\ }\hlsym{=\ }\hlstd{anterior}\hlsym{;}\\
215 \hlline{86\ }\hlstd{\ }\hlsym{\}}\\
216 \hlline{87\ }\hlstd{\ }\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{actual\ }\hlsym{==\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{)\ \{}\\
217 \hlline{88\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwa{return\ }\hlstd{costo\textunderscore camino}\hlsym{;}\\
218 \hlline{89\ }\hlstd{\ }\hlsym{\}\ }\hlstd{}\hlkwa{else\ }\hlstd{}\hlsym{\{}\\
219 \hlline{90\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwa{return\ }\hlstd{No\textunderscore hay\textunderscore camino}\hlsym{;}\\
220 \hlline{91\ }\hlstd{\ }\hlsym{\}}\\
221 \hlline{92\ }\hlstd{}\hlsym{\}}\\
222 \hlline{93\ }\hlstd{\\
223 \hlline{94\ }int64\ }\hlkwd{resolver}\hlstd{}\hlsym{()\ \{}\\
224 \hlline{95\ }\hlstd{\ int64\ flujo\textunderscore total\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
225 \hlline{96\ }\hlstd{\ int64\ costo\textunderscore total\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
226 \hlline{97\ }\hlstd{\ }\hlkwa{while\ }\hlstd{}\hlsym{(}\hlstd{flujo\textunderscore total\ }\hlsym{$<$\ }\hlstd{capacidad\textunderscore eje0}\hlsym{)\ \{}\\
227 \hlline{98\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlslc{//print\textunderscore grafo\textunderscore residual();}\\
228 \hlline{99\ }\hlstd{}\hlstd{\ \ }\hlstd{vint\ camino\textunderscore aumento}\hlsym{;}\\
229 \hlline{100\ }\hlstd{}\hlstd{\ \ }\hlstd{int64\ costo\textunderscore camino\ }\hlsym{=\ }\hlstd{}\hlkwd{caumento}\hlstd{}\hlsym{(}\hlstd{camino\textunderscore aumento}\hlsym{);}\\
230 \hlline{101\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{costo\textunderscore camino\ }\hlsym{==\ }\hlstd{No\textunderscore hay\textunderscore camino}\hlsym{)\ }\hlstd{}\hlkwa{return\ }\hlstd{No\textunderscore hay\textunderscore camino}\hlsym{;}\\
231 \hlline{102\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlslc{//\ saturar\ el\ camino\ de\ aumento}\\
232 \hlline{103\ }\hlstd{}\hlstd{\ \ }\hlstd{int64\ mn\ }\hlsym{=\ }\hlstd{INF}\hlsym{;}\\
233 \hlline{104\ }\hlstd{}\hlstd{\ \ }\hlstd{\\
234 \hlline{105\ }}\hlstd{\ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{i}\hlsym{,\ }\hlstd{camino\textunderscore aumento}\hlsym{.}\hlstd{}\hlkwd{size}\hlstd{}\hlsym{()\ {-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ \{}\\
235 \hlline{106\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlkwb{const\ }\hlstd{int64\ v\ }\hlsym{=\ }\hlstd{camino\textunderscore aumento}\hlsym{{[}}\hlstd{i\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{{]},\ }\hlstd{w\ }\hlsym{=\ }\hlstd{camino\textunderscore aumento}\hlsym{{[}}\hlstd{i}\hlsym{{]};}\\
236 \hlline{107\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{flujo}\hlsym{{[}}\hlstd{v}\hlsym{{]}{[}}\hlstd{w}\hlsym{{]}\ $<$\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{)\ \{}\\
237 \hlline{108\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{mn\ }\hlsym{=\ }\hlstd{}\hlkwd{min}\hlstd{}\hlsym{(}\hlstd{mn}\hlsym{,\ {-}}\hlstd{flujo}\hlsym{{[}}\hlstd{v}\hlsym{{]}{[}}\hlstd{w}\hlsym{{]});}\\
238 \hlline{109\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlsym{\}\ }\hlstd{}\hlkwa{else\ }\hlstd{}\hlsym{\{}\\
239 \hlline{110\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{mn\ }\hlsym{=\ }\hlstd{}\hlkwd{min}\hlstd{}\hlsym{(}\hlstd{mn}\hlsym{,\ }\hlstd{}\hlkwd{capacidad}\hlstd{}\hlsym{(}\hlstd{v}\hlsym{,\ }\hlstd{w}\hlsym{)\ {-}\ }\hlstd{flujo}\hlsym{{[}}\hlstd{v}\hlsym{{]}{[}}\hlstd{w}\hlsym{{]});}\\
240 \hlline{111\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlsym{\}}\\
241 \hlline{112\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlsym{\}}\\
242 \hlline{113\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{i}\hlsym{,\ }\hlstd{camino\textunderscore aumento}\hlsym{.}\hlstd{}\hlkwd{size}\hlstd{}\hlsym{()\ {-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ \{}\\
243 \hlline{114\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlkwb{const\ }\hlstd{int64\ v\ }\hlsym{=\ }\hlstd{camino\textunderscore aumento}\hlsym{{[}}\hlstd{i\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{{]},\ }\hlstd{w\ }\hlsym{=\ }\hlstd{camino\textunderscore aumento}\hlsym{{[}}\hlstd{i}\hlsym{{]};}\\
244 \hlline{115\ }\hlstd{}\hlstd{\ \ \ }\hlstd{flujo}\hlsym{{[}}\hlstd{v}\hlsym{{]}{[}}\hlstd{w}\hlsym{{]}\ +=\ }\hlstd{mn}\hlsym{;}\\
245 \hlline{116\ }\hlstd{}\hlstd{\ \ \ }\hlstd{flujo}\hlsym{{[}}\hlstd{w}\hlsym{{]}{[}}\hlstd{v}\hlsym{{]}\ {-}=\ }\hlstd{mn}\hlsym{;}\\
246 \hlline{117\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlsym{\}}\\
247 \hlline{118\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{mn\ }\hlsym{==\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{)\ }\hlstd{}\hlkwa{return\ }\hlstd{No\textunderscore hay\textunderscore camino}\hlsym{;}\\
248 \hlline{119\ }\hlstd{}\hlstd{\ \ }\hlstd{flujo\textunderscore total\ }\hlsym{+=\ }\hlstd{mn}\hlsym{;}\\
249 \hlline{120\ }\hlstd{}\hlstd{\ \ }\hlstd{costo\textunderscore total\ }\hlsym{+=\ }\hlstd{costo\textunderscore camino\ }\hlsym{{*}\ }\hlstd{mn}\hlsym{;}\\
250 \hlline{121\ }\hlstd{\ }\hlsym{\}}\\
251 \hlline{122\ }\hlstd{\\
252 \hlline{123\ }\ }\hlkwa{return\ }\hlstd{costo\textunderscore total}\hlsym{;}\\
253 \hlline{124\ }\hlstd{}\hlsym{\}}\\
254 \hlline{125\ }\hlstd{}\\
255 \hlline{126\ }\hlkwb{int\ }\hlstd{}\hlkwd{main}\hlstd{}\hlsym{()\ \{}\\
256 \hlline{127\ }\hlstd{\ int64\ m}\hlsym{;}\\
257 \hlline{128\ }\hlstd{\ }\hlkwa{while\ }\hlstd{}\hlsym{(}\hlstd{cin\ }\hlsym{$>$$>$\ }\hlstd{n\ }\hlsym{$>$$>$\ }\hlstd{m}\hlsym{)\ \{}\\
258 \hlline{129\ }\hlstd{}\hlstd{\ \ }\hlstd{n}\hlsym{++;}\\
259 \hlline{130\ }\hlstd{}\hlstd{\ \ }\hlstd{grafo\ }\hlsym{=\ }\hlstd{}\hlkwd{vvint}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{}\hlkwd{vint}\hlstd{}\hlsym{());}\\
260 \hlline{131\ }\hlstd{}\hlstd{\ \ }\hlstd{costo\ }\hlsym{=\ }\hlstd{}\hlkwd{vvint}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{}\hlkwd{vint}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{));}\\
261 \hlline{132\ }\hlstd{}\hlstd{\ \ }\hlstd{flujo\ }\hlsym{=\ }\hlstd{}\hlkwd{vvint}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{}\hlkwd{vint}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{));}\\
262 \hlline{133\ }\hlstd{\\
263 \hlline{134\ }}\hlstd{\ \ }\hlstd{}\hlkwd{agregar}\hlstd{}\hlsym{(}\hlstd{}\hlnum{0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{);}\\
264 \hlline{135\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{i}\hlsym{,\ }\hlstd{m}\hlsym{)\ \{}\\
265 \hlline{136\ }\hlstd{}\hlstd{\ \ \ }\hlstd{int64\ v1}\hlsym{,\ }\hlstd{v2}\hlsym{,\ }\hlstd{c}\hlsym{;}\\
266 \hlline{137\ }\hlstd{}\hlstd{\ \ \ }\hlstd{cin\ }\hlsym{$>$$>$\ }\hlstd{v1\ }\hlsym{$>$$>$\ }\hlstd{v2\ }\hlsym{$>$$>$\ }\hlstd{c}\hlsym{;}\\
267 \hlline{138\ }\hlstd{}\hlstd{\ \ \ }\hlstd{}\hlkwd{agregar}\hlstd{}\hlsym{(}\hlstd{v1}\hlsym{,\ }\hlstd{v2}\hlsym{,\ }\hlstd{c}\hlsym{);}\\
268 \hlline{139\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlsym{\}}\\
269 \hlline{140\ }\hlstd{}\hlstd{\ \ }\hlstd{cin\ }\hlsym{$>$$>$\ }\hlstd{capacidad\textunderscore eje0\ }\hlsym{$>$$>$\ }\hlstd{capacidad\textunderscore enlace}\hlsym{;}\\
270 \hlline{141\ }\hlstd{}\hlstd{\ \ }\hlstd{int64\ r\ }\hlsym{=\ }\hlstd{}\hlkwd{resolver}\hlstd{}\hlsym{();}\\
271 \hlline{142\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{r\ }\hlsym{==\ }\hlstd{No\textunderscore hay\textunderscore camino}\hlsym{)\ \{}\\
272 \hlline{143\ }\hlstd{}\hlstd{\ \ \ }\hlstd{cout\ }\hlsym{$<$$<$\ }\hlstd{}\hlstr{"Impossible."}\hlstd{\ }\hlsym{$<$$<$\ }\hlstd{endl}\hlsym{;}\\
273 \hlline{144\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlsym{\}\ }\hlstd{}\hlkwa{else\ }\hlstd{}\hlsym{\{}\\
274 \hlline{145\ }\hlstd{}\hlstd{\ \ \ }\hlstd{cout\ }\hlsym{$<$$<$\ }\hlstd{r\ }\hlsym{$<$$<$\ }\hlstd{endl}\hlsym{;}\\
275 \hlline{146\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlsym{\}}\\
276 \hlline{147\ }\hlstd{\ }\hlsym{\}}\\
277 \hlline{148\ }\hlstd{\ }\hlkwa{return\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
278 \hlline{149\ }\hlstd{}\hlsym{\}}\\
279 \hlline{150\ }\hlstd{}\\
280 \mbox{}
281 \normalfont
282 \shorthandon{"}